Literal 4.7.1 - Ejercicio 10

a) Análisis descriptivo

El conjunto de datos Weekly contiene porcentajes de retorno semanales del índice S&P entre los años 1990 y 2010 con 1089 observaciones.

  • Year: es el año en el que fue obtenida la observación.
  • Lag 1-5: Retornos porcentuales de las 5 semanas anteriores, respectivamente.
  • Volume: Volumen de acciones intercambiadas (Número promedio de acciones diarias intercambiadas en billones).
  • Today: Retorno porcentual de la semana.
  • Direction: Indica si el mercado tuvo un retorno positivo o negativo en esta semana.

Encabezados y primeras 6 observaciones:

## # A tibble: 6 x 9
##    Year   Lag1   Lag2   Lag3   Lag4   Lag5 Volume  Today Direction
##   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl> <fct>    
## 1  1990  0.816  1.57  -3.94  -0.229 -3.48   0.155 -0.27  Down     
## 2  1990 -0.27   0.816  1.57  -3.94  -0.229  0.149 -2.58  Down     
## 3  1990 -2.58  -0.27   0.816  1.57  -3.94   0.160  3.51  Up       
## 4  1990  3.51  -2.58  -0.27   0.816  1.57   0.162  0.712 Up       
## 5  1990  0.712  3.51  -2.58  -0.27   0.816  0.154  1.18  Up       
## 6  1990  1.18   0.712  3.51  -2.58  -0.27   0.154 -1.37  Down

Volumen promedio de acciones diarias intercambiadas en el tiempo

Se evidencia un crecimiento constante con un alza grande en el año 2005 y una estabilización de la trayectoria alrededor del año 2007. Se añadió un ruido a la posición de cada punto para poder evidenciar la densidad, además de transparencia. Se utilizó el método mgcv::gam para ajustar la tendencia.

El incremento en la volatilidad del índice acompañó su crecimiento a partir del 2007.

Correlación entre las variables

No se encontraron relaciones lineales claras entre las variables. Se presentan comportamientos esperados de la variable Today con la variable categórica Direction representada en el color, donde los valores negativos están asociados a un decrecimiento.

b) ¿Podemos predecir si el índice subirá o no mediante regresión logística?

Utilicemos regresión logística para predecir si habrá un retorno positivo del mercado en esta semana. Para ello, se utilizará el retorno porcentual de las 5 últimas semanas y el volumen sin separar un conjunto de entrenamiento y de prueba (Modelo sobreajustado).

## 
## Call:
## glm(formula = Direction ~ Lag1 + Lag2 + Lag3 + Lag4 + Lag5 + 
##     Volume, family = binomial, data = weekly)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -1.6949  -1.2565   0.9913   1.0849   1.4579  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)   
## (Intercept)  0.26686    0.08593   3.106   0.0019 **
## Lag1        -0.04127    0.02641  -1.563   0.1181   
## Lag2         0.05844    0.02686   2.175   0.0296 * 
## Lag3        -0.01606    0.02666  -0.602   0.5469   
## Lag4        -0.02779    0.02646  -1.050   0.2937   
## Lag5        -0.01447    0.02638  -0.549   0.5833   
## Volume      -0.02274    0.03690  -0.616   0.5377   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1496.2  on 1088  degrees of freedom
## Residual deviance: 1486.4  on 1082  degrees of freedom
## AIC: 1500.4
## 
## Number of Fisher Scoring iterations: 4

Si realizamos una prueba de hipótesis formal para la significancia de los parámetros, encontraremos que la probabilidad de rechazar la hipótesis nula es muy grande para todas las variables predictoras excepto para el Lag2 donde al parecer hay significancia. El valor en el tiempo \(t-2\) parece tener una relación con el tiempo \(t\).

c) Matriz de confusión de la regresión logística y calidad de la predicción del modelo sobreajustado

##      Up
## Down  0
## Up    1

## # A tibble: 2 x 3
##   .metric  .estimator .estimate
##   <chr>    <chr>          <dbl>
## 1 accuracy binary        0.561 
## 2 kap      binary        0.0350

Se obtiene una tasa de clasificación correcta accuracy del 56.1% utilizando regresión logística. Es importante interpretar este resultado correctamente, ya que la predicción obtenida indica que el mercado subió 557 días y bajó 54 días, y que no se está prediciendo el valor en el tiempo \(t+1\).

Cada predicción individual se debe interpretar de la siguiente manera: “Dadas las 5 semanas anteriores y el volumen de ésta, el mercado tendrá un retorno positivo”. La mayor cantidad de errores se cometió prediciendo que el mercado iba a subir y en realidad bajó, esta situación ocurrió 430 veces.

d) Modelo de regresión logística sólo con Lag2 y conjunto de prueba

## 
## Call:
## glm(formula = Direction ~ Lag2, family = "binomial", data = weekly_train)
## 
## Deviance Residuals: 
##    Min      1Q  Median      3Q     Max  
## -1.536  -1.264   1.021   1.091   1.368  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)   
## (Intercept)  0.20326    0.06428   3.162  0.00157 **
## Lag2         0.05810    0.02870   2.024  0.04298 * 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1354.7  on 984  degrees of freedom
## Residual deviance: 1350.5  on 983  degrees of freedom
## AIC: 1354.5
## 
## Number of Fisher Scoring iterations: 4

## # A tibble: 2 x 3
##   .metric  .estimator .estimate
##   <chr>    <chr>          <dbl>
## 1 accuracy binary         0.625
## 2 kap      binary         0.141

Al igual que el modelo anterior, se tienen fallas al intentar predecir las bajas del mercado, sin embargo, este se validó en un conjunto de prueba de 104 observaciones desconocidas para el modelo. El accuracy en este caso es del 62.5%. Los resultados son sorpresivamente mejores que en el modelo sobreajustado del literal b).

d) Modelo LDA (Linear Discriminant Analysis) para predecir la tendencia del mercado

## Call:
## lda(Direction ~ Lag2, data = weekly_train)
## 
## Prior probabilities of groups:
##      Down        Up 
## 0.4477157 0.5522843 
## 
## Group means:
##             Lag2
## Down -0.03568254
## Up    0.26036581
## 
## Coefficients of linear discriminants:
##            LD1
## Lag2 0.4414162

## # A tibble: 2 x 3
##   .metric  .estimator .estimate
##   <chr>    <chr>          <dbl>
## 1 accuracy binary         0.625
## 2 kap      binary         0.141

Se obtienen las mismas clasificaciones para el modelo LDA y el modelo de regresión logística. Como el coeficiente discriminante lineal es Lag2 = 0.4414, es de esperar que en ambas categorías la gráfica de éstos sea similar. La matriz de confusión es igual a la del modelo logístico.

f) Modelo QDA (Quadratic Discriminant Analysis) para predecir la tendencia del mercado

## Call:
## qda(Direction ~ Lag2, data = weekly_train)
## 
## Prior probabilities of groups:
##      Down        Up 
## 0.4477157 0.5522843 
## 
## Group means:
##             Lag2
## Down -0.03568254
## Up    0.26036581

## # A tibble: 2 x 3
##   .metric  .estimator .estimate
##   <chr>    <chr>          <dbl>
## 1 accuracy binary         0.587
## 2 kap      binary         0

El clasificador QDA clasificó todos los valores como “Up”, si bien es una estrategia que otorga resultados buenos en términos porcentuales con respecto al accuracy, se espera que el modelo proponga en algunos casos predicciones de baja del mercado.

g) Modelo KNN (K-Nearest Neighbors) para predecir la tendencia del mercado

## # A tibble: 2 x 3
##   .metric  .estimator .estimate
##   <chr>    <chr>          <dbl>
## 1 accuracy binary        0.548 
## 2 kap      binary        0.0453

El clasificador \(KNN\) tiene una tasa de clasificación correcta del 50% utilizando \(k = 1\), sin embargo, al utilizar \(k = 3\) se obtiene un 54.8%. Este clasificador no tuvo inconvenientes en proponer predicciones variadas según el valor anterior del mercado.

h) ¿Qué métodos producen los mejores resultados para predecir la tendencia del mercado utilizando Lag2?

Los métodos de regresión logística y análisis de discriminante lineal obtuvieron los mejores resultados, con un accuracy del 62.5%. Se decide favorecer al modelo de regresión logística dada la facilidad de interpretación de los coeficientes y las facilidades gráficas de comunicación que permite la curva logística.

i) Mejora del mejor modelo y variables adicionales de interés

Selección Step-wise con la función stepAIC sin interacciones

## 
## Call:  glm(formula = Direction ~ Lag1 + Lag2, family = "binomial", data = weekly_train)
## 
## Coefficients:
## (Intercept)         Lag1         Lag2  
##     0.21109     -0.05421      0.05384  
## 
## Degrees of Freedom: 984 Total (i.e. Null);  982 Residual
## Null Deviance:       1355 
## Residual Deviance: 1347  AIC: 1353

## # A tibble: 2 x 3
##   .metric  .estimator .estimate
##   <chr>    <chr>          <dbl>
## 1 accuracy binary        0.577 
## 2 kap      binary        0.0350

El modelo seleccionado por Stepwise selection tiene un accuracy menor que el de un solo predictor, sin embargo, su AIC es el mismo. El AIC evalúa únicamente el ajuste, por lo que se recomendaría el modelo de una sola variable predictora. Es importante resaltar que el modelo de menor AIC podría ser mejor en un conjunto de prueba diferente.

Mejor modelo por tanteo de interacciones

Se proponen variables con interacciones y se selecciona el modelo con mayor accuracy en el conjunto de prueba, en este caso utilizando la variable Lag2 y la interacción entre Lag1, Lag 4 y Volume

## 
## Call:
## glm(formula = Direction ~ Lag2 + Lag1:Lag4:Volume, family = "binomial", 
##     data = weekly_train)
## 
## Deviance Residuals: 
##    Min      1Q  Median      3Q     Max  
## -1.493  -1.265   1.023   1.089   1.446  
## 
## Coefficients:
##                   Estimate Std. Error z value Pr(>|z|)   
## (Intercept)      0.2047966  0.0643540   3.182  0.00146 **
## Lag2             0.0553928  0.0291831   1.898  0.05768 . 
## Lag1:Lag4:Volume 0.0007316  0.0014747   0.496  0.61982   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1354.7  on 984  degrees of freedom
## Residual deviance: 1350.3  on 982  degrees of freedom
## AIC: 1356.3
## 
## Number of Fisher Scoring iterations: 4

## # A tibble: 2 x 3
##   .metric  .estimator .estimate
##   <chr>    <chr>          <dbl>
## 1 accuracy binary         0.644
## 2 kap      binary         0.179

Con base en los resultados anteriores se selecciona el modelo por tanteo por su accuracy superior, sin embargo, esto puede ser un sobreajuste del conjunto de prueba; por ello, si este modelo fuera a producción se recomienda realizar validación cruzada para identificar si la interacción de variables añadida es significativa. Si no es lo es, el modelo seleccionado por Stepwise selection se considera apropiado.

Literal 4.7.1 - Ejercicio 11

En este apartado, desarrollaremos un modelo para predecir cuando un carro tiene alto o bajo rendimiento de combustible respecto al kilometraje.

Inicialmente observemos las características de este conjunto de datos. El conjunto de datos Auto contiene información sobre 392 vehículos cuyas variables son:

  • mpg: millas por galón.
  • cylinders: numero de cilindros (entre 4 y 8)
  • displacement: desplazamiento del motor en pies.
  • horsepower: caballos de fuerza del motor.
  • weight: peso del vehículo en libras.
  • acceleration: tiempo que tarda en acelerar de 0 a 60 medido en segundos.
  • year: modelo del auto (módulo 100)
  • origin: origen del vehiculo.
  • name: nombre del vehículo.

Se mostrarán los primeros 6 datos junto con su encabezado.

## # A tibble: 6 x 9
##     mpg cylinders displacement horsepower weight acceleration  year origin
##   <dbl>     <dbl>        <dbl>      <dbl>  <dbl>        <dbl> <dbl>  <dbl>
## 1    18         8          307        130   3504         12      70      1
## 2    15         8          350        165   3693         11.5    70      1
## 3    18         8          318        150   3436         11      70      1
## 4    16         8          304        150   3433         12      70      1
## 5    17         8          302        140   3449         10.5    70      1
## 6    15         8          429        198   4341         10      70      1
## # ... with 1 more variable: name <fct>

a) Creación de una variable respuesta binaria

A continuación crearemos la variabel mpg01 que tomará el valor de 1 si la variable mpg esta por encima de la mediana, y 0 en caso contrario.

## # A tibble: 6 x 9
##   cylinders displacement horsepower weight acceleration  year origin name 
##       <dbl>        <dbl>      <dbl>  <dbl>        <dbl> <dbl> <fct>  <fct>
## 1         8          307        130   3504         12      70 1      chev~
## 2         8          350        165   3693         11.5    70 1      buic~
## 3         8          318        150   3436         11      70 1      plym~
## 4         8          304        150   3433         12      70 1      amc ~
## 5         8          302        140   3449         10.5    70 1      ford~
## 6         8          429        198   4341         10      70 1      ford~
## # ... with 1 more variable: mpg01 <fct>

b) Relaciones entre las variables

A continuación realicemos un análisis descriptivo para observar el comportamiento de las variables regresoras respecto a la variable mpg01

Por otro lado, demos una visualización para las variable origin, la cual es categórica.

Tomando en cuenta las gráficas, podemos afirmar que las variables cylinders, displacement, horsepower y weight son buenas variables cuantitativas para realizar una clasificación de la variable mpg01, pues al graficar discriminando por clases se puede observar que hay una particion notoria entre los carros de alto consumo y bajo consumo respecto a estas 4 variables. Note también que la variabele origen puede ser una buena variable predictora para mpg01 cuando el tipo de carro es americano.

c) División de conjuntos de entrenamiento y validación

A continuación dividiremos el conjunto Auto en dos conjuntos, uno de validación y otro de entrenamiento dejando el 75% de los datos para entrenar los modelos.

## Warning: Length of logical index must be 1 or 392, not 9
## Warning: Length of logical index must be 1 or 392, not 9

d) Modelo LDA

A continuación realizaremos un modelo LDA considerando las varables que fueron extraidas en el análisis descriptivo y que se consideraron importantes a la hora de realizar una clasificación para la variable respuesta mpg01.

## Call:
## lda(mpg01 ~ cylinders + displacement + horsepower + weight + 
##     origin, data = auto_train)
## 
## Prior probabilities of groups:
##         0         1 
## 0.5038462 0.4961538 
## 
## Group means:
##   cylinders displacement horsepower   weight    origin2    origin3
## 0  6.763359     273.6947  131.18321 3624.275 0.07633588 0.05343511
## 1  4.201550     116.6512   80.03101 2353.341 0.27906977 0.36434109
## 
## Coefficients of linear discriminants:
##                        LD1
## cylinders    -0.4910290676
## displacement  0.0009326095
## horsepower    0.0002152040
## weight       -0.0009186578
## origin2       0.2080237771
## origin3       0.3315454367

Grafiquemos a continuación el resultado del modelo.

Ahora construyamos la matriz de confusión para el modelo con el conjunto de datos de validación para observar el desempeño.

## # A tibble: 2 x 3
##   .metric  .estimator .estimate
##   <chr>    <chr>          <dbl>
## 1 accuracy binary         0.917
## 2 kap      binary         0.833

Note entonces que la tasa de clasificación correcta es de un 91.67%, lo que muestra que el modelo tiene una alta calidad.

e) Modelo QDA

Con el fin de realizar una comparativa con el modelo anterior, realicemos un modelo QDA para predecir la varibale mpg01 usando las variables más significativas encontradas en el análisis descriptivo.

## Call:
## qda(mpg01 ~ cylinders + displacement + horsepower + weight + 
##     origin, data = auto_train)
## 
## Prior probabilities of groups:
##         0         1 
## 0.5038462 0.4961538 
## 
## Group means:
##   cylinders displacement horsepower   weight    origin2    origin3
## 0  6.763359     273.6947  131.18321 3624.275 0.07633588 0.05343511
## 1  4.201550     116.6512   80.03101 2353.341 0.27906977 0.36434109

Ahora construyamos la matriz de confusión para el modelo QDA con el conjunto de datos de validación.

## # A tibble: 2 x 3
##   .metric  .estimator .estimate
##   <chr>    <chr>          <dbl>
## 1 accuracy binary         0.917
## 2 kap      binary         0.833

Note entonces que la tasa de clasificación correcta es de un 91.67%, y en comparación con el modelo LDA, se puede decir que tienen un desempeño muy parecido de acuerdo a la metrica de la tasa de clasificación correcta.

f) Modelo de regresión logística

Por otra parte, construiremos un modelo de regresión logística para realizar una predicción de la variable mpg01.

## 
## Call:
## glm(formula = mpg01 ~ cylinders + displacement + horsepower + 
##     weight + origin, family = binomial, data = auto_train)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.4242  -0.2435  -0.0032   0.4063   3.2618  
## 
## Coefficients:
##                Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  10.8848781  1.9658747   5.537 3.08e-08 ***
## cylinders     0.0113966  0.4174945   0.027   0.9782    
## displacement -0.0144066  0.0121308  -1.188   0.2350    
## horsepower   -0.0414001  0.0165489  -2.502   0.0124 *  
## weight       -0.0015573  0.0008712  -1.788   0.0738 .  
## origin2      -0.1960746  0.6866776  -0.286   0.7752    
## origin3       0.0069782  0.7053619   0.010   0.9921    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 360.42  on 259  degrees of freedom
## Residual deviance: 145.09  on 253  degrees of freedom
## AIC: 159.09
## 
## Number of Fisher Scoring iterations: 7

Calculemos de igual manera la matriz de confusión para realizar una comparación con los métodos previos usando los datos de entrenamiento.

## # A tibble: 2 x 3
##   .metric  .estimator .estimate
##   <chr>    <chr>          <dbl>
## 1 accuracy binary         0.924
## 2 kap      binary         0.848

De acuerdo a este resultado, se puede ver que todos los métodos tienen un puntaje muy similar entre ellos pues en este caso, se puede observar una tasa de clasificación correcta del 92.42%.

g) Modelo \(KNN\)

Realicemos a continuación un modelo de \(KNN\) para predecir la variable mpg, en este caso, debemos probar con varios casos de \(K\) hallar un óptimo. Para esto, realizaremos una función que reciba como parámetro un numero \(k\) y esta función retornará la tasa de clasificación correcta para el \(k\) dado, realizando la clasificación sobre el conjunto de prueba.

Ahora tomaremos varios valores de \(k\) en un rango entre 1 y 60, y para estos valores, computaremos su tasa de clasificación correcta y los graficaremos para observar cual es el mejor valor de \(k\) en este rango.

Una vez observada la gráfica, encontraremos el mejor valor de \(k\) que mejora la tasa de clasificación correcta, y además para este valor de \(k\) realizaremos la matriz de confusión para ver el desempeño del modelo de manera global.

Concluimos entonces que para los valores de \(k\) probados, el mejor accuracy obtenido fue de 90.91%, el cual sigue siendo muy similar a los puntajes anteriores y desde un punto de vista global, estos puntajes denotan que los modelos tienen una muy buena calidad.